﻿#include <stdio.h>
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"

#define QUEUE_LENGTH 5
#define ITEM_SIZE sizeof(uint32_t)

// 定义队列句柄
QueueHandle_t xQueue;

// 发送任务
void vSenderTask(void *pvParameters) {
  uint32_t ulValueToSend = 0;

  while (1) {
    // 发送数据到队列
    if (xQueueSend(xQueue, &ulValueToSend, portMAX_DELAY) == pdPASS) {
      printf("发送数据: %d\n", ulValueToSend);
      ulValueToSend++;
    }
    vTaskDelay(pdMS_TO_TICKS(1000));  // 每秒发送一次
  }
}

// 接收任务
void vReceiverTask(void *pvParameters) {
  uint32_t ulReceivedValue;

  while (1) {
    // 从队列接收数据
    if (xQueueReceive(xQueue, &ulReceivedValue, portMAX_DELAY) == pdPASS) {
      printf("接收数据: %d\n", ulReceivedValue);
    }
  }
}

// 主函数
int main(void) {
  // 创建队列
  xQueue = xQueueCreate(QUEUE_LENGTH, ITEM_SIZE);
  if (xQueue != NULL) {
    // 创建发送任务
    xTaskCreate(vSenderTask, "Sender", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
    // 创建接收任务
    xTaskCreate(vReceiverTask, "Receiver", configMINIMAL_STACK_SIZE, NULL, 1, NULL);

    // 启动调度器
    vTaskStartScheduler();
  }

  // 如果调度器返回，说明系统出现了错误
  for (;;);
  return 0;
}
